package LeetCode;

/**
 * @Author：DijaH
 * @Date：2023/11/27 17:30
 * @Version：1.0.0
 * @Description： 删除倒数第N个节点
 */
public class code19_removeNthFromEnd {

    /**
     * 使用双指针：pre cur
     * 从头节点先数够n个节点，然后cur开始往后移动。
     * 当n==0的时候，说明已经数够了
     * 移动的同时pre也往右移动。直至cur后面没有了，那么要删除的就是pre当前的节点
     * @param head
     * @param n
     * @return
     */
    public ListNode removeNthFromEnd1(ListNode head,int n){
        ListNode cur = head;
        ListNode pre = null;
        //有没有数够
        boolean enough = false;
        while (cur != null){
            n--;
            if(n <= 0){
                enough = true;
            }else if(n == -1){
                //要删除的就是头
                pre = head;
            }else{
                pre = pre.next;
            }
            cur = cur.next;
        }
        //删除指定的节点
        if(!enough){
            return head;
        }
        if(pre == null){
            return head.next;
        }
        pre = pre.next.next;
        return head;
    }

}
